#include<iostream>
#include<type_traits>
using namespace std;
/*源码分析*/
namespace my_type_traits {
	/* 值类型 */
	template<class T,T val>
	struct integral_constant{
		static constexpr T value = val;
		typedef T value_type;
		typedef integral_constant<T, val> type;
	};

	/* 真假值的定义 */
	typedef integral_constant<bool, true> true_type;
	typedef integral_constant<bool, false> false_type;

	/* 判断是否为同类型 */
	template<class T1,class T2>//不同类型
	struct is_same:false_type{};

	template<class T1>
	struct is_same<T1, T1> :true_type {};
}
int main(void) {
	/*1、STL内包含的类型判断*/
	cout << is_same<int, int>::value<< endl;
	cout << is_same<int, float>::value << endl;

	/*2、自定义的类型判断 */
	cout << my_type_traits::is_same<int, int>::value << endl;
	cout << my_type_traits::is_same<int, float>::value << endl;

	getchar();
	return 0;
}